package edu.nf.ch11.jdkproxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

/**
 * @author CSY
 * @date 2025 - 04 - 18
 */
public class Main {
    public static void main(String[] args) {
        //初始化回调处理器
        InvocationHandler handler = new ServiceInvocationHandler(new UserServiceImpl());
        //Proxy.newProxyInstance() - 动态创建代理对象
        //参数一：类加载器 - 用于加载动态创建的代理字节码 - 在运行时根据字节码使用类加载器动态创建字节数组 - 字节数组最后转换为Class对象
        //参数二：目标对象实现的所有接口 - 因为代理对象是基于目标对象的接口创建出来的
        //参数三：回调处理器 - 负责调用目标对象的行为并增强逻辑
        UserService userService = (UserService)Proxy.newProxyInstance(Main.class.getClassLoader(),
                UserServiceImpl.class.getInterfaces(),
                handler);
        userService.addUser();
    }
}
